package config

import (
	"fmt"
	"os"
	"strings"

	"github.com/spf13/viper"
)

// InitConfig 初始化配置
func InitConfig(configPath string) error {
	// 加载 .env 文件
	viper.SetConfigFile(".env")
	if err := viper.ReadInConfig(); err == nil {

		fmt.Println("Using config file:", viper.ConfigFileUsed())
	}

	viper.SetConfigName("config")
	viper.AddConfigPath(configPath)
	if err := viper.ReadInConfig(); err != nil {
		return err
	}

	// 获取当前环境
	appEnv := os.Getenv("APP_ENV")
	if appEnv == "" {
		appEnv = "development"
	}

	// 加载对应环境的配置
	viper.SetEnvPrefix("APP")
	viper.AutomaticEnv()
	viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))

	// 合并环境配置
	if viper.IsSet("env." + appEnv) {
		envConfig := viper.Sub("env." + appEnv)
		if envConfig != nil {
			// 使用 MergeConfigMap 方法合并配置
			if err := viper.MergeConfigMap(envConfig.AllSettings()); err != nil {
				return err
			}
		}
	}

	return nil
}
